//
// Created by Elyar Anwar on 2024/5/22.
//

#include "ap.h"
#include "esp_log.h"


void event_handler(void *args, esp_event_base_t event_base, int32_t event_id, void *event_data) {
    if (event_base == WIFI_EVENT) {
        switch (event_id) {
            case WIFI_EVENT_AP_START:
                ESP_LOGI(NET_LOG_TAG, "WIFI_EVENT_AP_START");
                break;
            case WIFI_EVENT_AP_STADISCONNECTED:
                ESP_LOGI(NET_LOG_TAG, "WIFI_EVENT_AP_STADISCONNECTED");
                break;
            case WIFI_EVENT_AP_STACONNECTED:
                ESP_LOGI(NET_LOG_TAG, "WIFI_EVENT_AP_STACONNECTED");
                break;
            default:
                ESP_LOGI(NET_LOG_TAG, "DEFAULT EVENT");
        }
    }
}

/**
 * 主任务通过调用函数 esp_wifi_init() 创建 Wi-Fi 驱动程序任务，并初始化 Wi-Fi 驱动程序。
 */
void wifi_init() {
    esp_netif_create_default_wifi_ap();
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);
}

void wifi_config() {
    esp_wifi_set_mode(WIFI_MODE_AP);
    wifi_config_t cfg_ap = {
            .ap = {
                    .ssid="ESP32",
                    .password="88888888",
                    .max_connection = 4
            }
    };
    esp_wifi_set_config(WIFI_IF_AP, &cfg_ap);
}

/**
 * wifi AP 模式 初始化
 * @return
 */
esp_err_t net_ap_run() {
    ESP_LOGI(NET_LOG_TAG, "Init_Net_AP");
    nvs_flash_init();
    ESP_LOGI(NET_LOG_TAG, "1.1>创建/初始化LwIP");
    esp_netif_init();

    ESP_LOGI(NET_LOG_TAG, "1.2>创建/初始化事件");
    esp_event_loop_create_default();
    esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL);

    ESP_LOGI(NET_LOG_TAG, "1.3>创建/初始化WiFi");
    wifi_init();

    ESP_LOGI(NET_LOG_TAG, "2.0>配置WiFi");
    wifi_config();

    ESP_LOGI(NET_LOG_TAG, "3.0>启动WiFi");
    esp_wifi_start();
    esp_err_t err = 0;
    return err;
}